import random

# 定义一个列表,表示袋中的球
balls = ['W', 'W', 'W', 'W', 'R', 'R']


# 定义一个函数,用于模拟不放回抽样
def simulate_without_replacement(balls, num_samples):
    # 定义变量,用于记录白球和红球的数量
    white_count = 0
    red_count = 0
    both_white_count = 0
    both_red_count = 0

    # 循环模拟不放回抽样
    for _ in range(num_samples):
        # 复制当前球列表以避免修改原始列表
        temp_balls = balls[:]

        # 从袋子中不放回地随机抽取第一个球
        ball1 = random.choice(temp_balls)
        temp_balls.remove(ball1)

        # 根据第一个球的颜色更新计数
        if ball1 == 'W':
            white_count += 1
        elif ball1 == 'R':
            red_count += 1

            # 从袋子中不放回地随机抽取第二个球
        ball2 = random.choice(temp_balls)

        # 如果两个球相同,则判断颜色
        if ball1 == ball2:
            if ball1 == 'W':
                both_white_count += 1
            elif ball1 == 'R':
                both_red_count += 1

                # 由于我们是在每次迭代中复制列表，所以不需要重新填充原始列表
    # 返回白球数量,红球数量,两个白球数量,两个红球数量
    return white_count, red_count, both_white_count, both_red_count


# 调用函数,模拟取球过程
white_count, red_count, both_white_count, both_red_count = simulate_without_replacement(balls=balls, num_samples=1000)

# 由于总的样本数（num_samples）次抽样中，每次都会抽取两个球，
# 所以实际的可能事件总数为 num_samples * (len(balls) - 1) / 2（因为每次抽取后都会少一个球，所以平均每次可选的球数减少）
# 但为了简化计算，这里我们仍然用 num_samples 作为分母来近似计算概率，
# 特别是在样本数较大且每次抽取对总体影响较小时，这种近似是合理的。
# 输出结果
print("取到两个都是白球的概率为:", both_white_count / 1000)
print("取到两个都是红球的概率为:", both_red_count / 1000)